GroundwaterInit Subroutine

public subroutine GroundwaterInit(inifile)

Initialize groundwater

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: inifile

stores configuration information


Variables

Type Visibility Attributes Name Initial
integer(kind=short), public :: i
type(IniList), public :: iniDB
integer(kind=short), public :: j
integer(kind=short), public :: k
real(kind=float), public :: scalar
character(len=100), public :: string

Source Code

SUBROUTINE GroundwaterInit   & 
  !
  (inifile)       

IMPLICIT NONE


!Arguments with intent(in):
CHARACTER (LEN = *), INTENT(IN) :: inifile !!stores configuration information

!local declarations:
TYPE (IniList)         :: iniDB
INTEGER (KIND = short) :: k , i, j
CHARACTER (LEN = 100)  :: string
REAL (KIND = float)    :: scalar

!-----------------------------------end of declarations------------------------

!open and read configuration file
CALL IniOpen (inifile, iniDB)

!read the number of aquifers
IF ( KeyIsPresent ('aquifers', iniDB ) ) THEN
    basin % naquifers = IniReadInt ( 'aquifers', iniDB  ) 
ELSE
      CALL Catch ('error', 'Groundwater',   &
			      'aquifers not found in configuration file' )
END IF

!allocate aquifers
ALLOCATE ( basin % aquifer ( basin % naquifers ) )

!load parameters
DO k = 1, basin % naquifers
    string = 'aquifer_' // ToString (k)
    IF (SectionIsPresent(TRIM(string), iniDB)) THEN	
        
        !load domain and boundary condition id
        IF (SubSectionisPresent (subsection = 'boundary-condition-id', &
                            section = TRIM(string), iniDB = iniDB) ) THEN
            
            CALL GridByIni ( ini = iniDB, &
                             grid = basin % aquifer (k) % domainBC, &
                             section = TRIM(string), &
                             subsection = 'boundary-condition-id')
            
            
        ELSE
            CALL Catch ('error', 'Groundwater',   &
                        'missing boundary-condition-id in configuration file: ', &
                         argument = TRIM(string) )
        END IF
        
        
        !load boundary condition value

        IF (SubSectionisPresent (subsection = 'boundary-condition-value', &
                            section = TRIM(string), iniDB = iniDB) ) THEN
            IF (KeyIsPresent ('scalar', iniDB, TRIM(string), &
                                'boundary-condition-value' ) ) THEN
                
                    scalar = IniReadReal ('scalar', iniDB, &
                                    TRIM(string), 'boundary-condition-value' )
                
                    CALL NewGrid (basin % aquifer (k) % valueBC, &
                                    basin % aquifer (k) % domainBC, scalar)
            ELSE
            
                    CALL GridByIni ( ini = iniDB, &
                                grid = basin % aquifer (k) % valueBC, &
                                section = TRIM(string), &
                                subsection = 'boundary-condition-value')
            END IF
        ELSE
            CALL Catch ('error', 'Groundwater',   &
                        'missing boundary-condition-value in configuration file: ', &
                            argument = TRIM(string) )
        END IF
        
        
        !load initial head
        IF (SubSectionisPresent (subsection = 'initial-head', &
                            section = TRIM(string), iniDB = iniDB) ) THEN
            
            IF (KeyIsPresent ('scalar', iniDB, TRIM(string), &
                                 'initial-head' ) ) THEN
                
                scalar = IniReadReal ('scalar', iniDB, &
                                      TRIM(string), 'initial-head' )
                
                CALL NewGrid (basin % aquifer (k) % head0, &
                              basin % aquifer (k) % domainBC, scalar)
            ELSE
                CALL GridByIni ( ini = iniDB, &
                                grid = basin % aquifer (k) % head0, &
                                section = TRIM(string), &
                                subsection = 'initial-head')
            END IF
            
            CALL NewGrid (basin % aquifer (k) % head1, &
                              basin % aquifer (k) % domainBC, 0.)
           
            basin % aquifer (k) % head1 = basin % aquifer (k) % head0
            
            !head boundary condition overlay
            DO i = 1, basin % aquifer (k) % domainBC % idim
              DO j = 1, basin % aquifer (k) % domainBC % jdim
                 IF ( basin % aquifer (k) % domainBC % mat (i,j) == &
                     BC_DIRICHLET ) THEN
            
                     basin % aquifer (k) % head0 % mat (i,j) = &
                     basin % aquifer (k) % valueBC % mat (i,j)
                     
                     basin % aquifer (k) % head1 % mat (i,j) = &
                     basin % aquifer (k) % valueBC % mat (i,j)
                     
                     
                END IF
              END DO
            END DO
            

        ELSE
            CALL Catch ('error', 'Groundwater',   &
                        'missing initial-condition-head in configuration file: ', &
                            argument = TRIM(string) )
        END IF
        
        
        !load top elevation
        IF (SubSectionisPresent (subsection = 'top-elevation', &
                            section = TRIM(string), iniDB = iniDB) ) THEN
            IF (KeyIsPresent ('scalar', iniDB, TRIM(string), &
                              'top-elevation' ) ) THEN
                
                scalar = IniReadReal ('scalar', iniDB, &
                                      TRIM(string), 'top-elevation' )
                
                CALL NewGrid (basin % aquifer (k) % top, &
                              basin % aquifer (k) % domainBC, scalar)
                
            ELSE
            
                CALL GridByIni ( ini = iniDB, &
                                grid = basin % aquifer (k) % top, &
                                section = TRIM(string), &
                                subsection = 'top-elevation')
           END IF

        ELSE
            CALL Catch ('error', 'Groundwater',   &
                        'missing top-elevation in configuration file: ', &
                            argument = TRIM(string) )
        END IF
        
        
        !load bottom elevation
        IF (SubSectionisPresent (subsection = 'bottom-elevation', &
                            section = TRIM(string), iniDB = iniDB) ) THEN
            IF (KeyIsPresent ('scalar', iniDB, TRIM(string), &
                              'bottom-elevation' ) ) THEN
                
                scalar = IniReadReal ('scalar', iniDB, &
                                      TRIM(string), 'bottom-elevation' )
                
                CALL NewGrid (basin % aquifer (k) % bottom, &
                              basin % aquifer (k) % domainBC, scalar)
                
            ELSE
            
                CALL GridByIni ( ini = iniDB, &
                                grid = basin % aquifer (k) % bottom, &
                                section = TRIM(string), &
                                subsection = 'bottom-elevation')
           END IF

        ELSE
            CALL Catch ('error', 'Groundwater',   &
                        'missing bottom-elevation in configuration file: ', &
                            argument = TRIM(string) )
        END IF
        
        
        
        !load hydraulic conductivity
        IF (SubSectionisPresent (subsection = 'hydraulic-conductivity', &
                            section = TRIM(string), iniDB = iniDB) ) THEN
            IF (KeyIsPresent ('scalar', iniDB, TRIM(string), &
                              'hydraulic-conductivity' ) ) THEN
                
                scalar = IniReadReal ('scalar', iniDB, &
                                      TRIM(string), 'hydraulic-conductivity' )
                
                CALL NewGrid (basin % aquifer (k) % Ks, &
                              basin % aquifer (k) % domainBC, scalar)
                
            ELSE
            
                CALL GridByIni ( ini = iniDB, &
                                grid = basin % aquifer (k) % Ks, &
                                section = TRIM(string), &
                                subsection = 'hydraulic-conductivity')
           END IF

        ELSE
            CALL Catch ('error', 'Groundwater',   &
                        'missing hydraulic-conductivity in configuration file: ', &
                            argument = TRIM(string) )
        END IF
        
        
        !load specific yield
        IF (SubSectionisPresent (subsection = 'specific-yield', &
                            section = TRIM(string), iniDB = iniDB) ) THEN
            IF (KeyIsPresent ('scalar', iniDB, TRIM(string), &
                              'specific-yield' ) ) THEN
                
                scalar = IniReadReal ('scalar', iniDB, &
                                      TRIM(string), 'specific-yield' )
                
                CALL NewGrid (basin % aquifer (k) % sy, &
                              basin % aquifer (k) % domainBC, scalar)
                
            ELSE
            
                CALL GridByIni ( ini = iniDB, &
                                grid = basin % aquifer (k) % sy, &
                                section = TRIM(string), &
                                subsection = 'specific-yield')
           END IF

        ELSE
            CALL Catch ('error', 'Groundwater',   &
                        'missing specific-yield in configuration file: ', &
                            argument = TRIM(string) )
        END IF
        
        
        ! aquitard hydraulic conductivity
        IF ( k <  basin % naquifers ) THEN 
            IF (SubSectionisPresent (subsection = 'aquitard-conductivity', &
                                section = TRIM(string), iniDB = iniDB) ) THEN
                IF (KeyIsPresent ('scalar', iniDB, TRIM(string), &
                                  'aquitard-conductivity' ) ) THEN
                
                    scalar = IniReadReal ('scalar', iniDB, &
                                          TRIM(string), 'aquitard-conductivity' )
                
                    CALL NewGrid (basin % aquifer (k) % KsAquitard, &
                                  basin % aquifer (k) % domainBC, scalar)
                
                ELSE
            
                    CALL GridByIni ( ini = iniDB, &
                                    grid = basin % aquifer (k) % KsAquitard, &
                                    section = TRIM(string), &
                                    subsection = 'aquitard-conductivity')
               END IF

            ELSE
                CALL Catch ('error', 'Groundwater',   &
                            'missing aquitard-conductivity in configuration file: ', &
                                argument = TRIM(string) )
            END IF
        END IF

        
        
    ELSE
        CALL Catch ('error', 'Groundwater',   &
			        'missing section in configuration file: ', &
                    argument = TRIM(string) )
    END IF 
    
END DO

!allocate variables
CALL NewGrid ( transmissivity, basin % aquifer (1) % domainBC, 0. )
CALL NewGrid ( fluxUpward, basin % aquifer (1) % domainBC, 0. )
CALL NewGrid ( fluxDownward, basin % aquifer (1) % domainBC, 0. )
CALL NewGrid ( vadoseDepth, basin % aquifer (1) % domainBC, 0. )

!check river-groundwater interaction
IF ( SectionIsPresent ( 'river-groundwater', iniDB) ) THEN
    riverGroundwaterInteract = .TRUE.
    CALL GroundwaterRiverInit ( inifile )
ELSE
    riverGroundwaterInteract = .FALSE.
END IF


!destroy iniDB
CALL IniClose (IniDB)


  END SUBROUTINE GroundwaterInit